﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using vudu.ClasesDominio;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_09_Gestionar_Carga_de_Archivos_PDF;

namespace vudu.Presentacion.Presentador.VU_09_Gestionar_Carga_de_Archivos_PDF
{
    public class PresentadorEliminarArchivoPdf
    {
        #region Atributos

        private IContratoEliminarArchivoPdf _vista;
        private EnlaceLogico _fachada;
        private List<OperacionesPdf> _misArchivos;
        private Profesor _miProfesor;
        private List<Categoria> _misCategorias;
        private SeccionMateria _miSeccion;
        private Materia _miMateria;
       

       #endregion

        #region Gets y Sets

        public IContratoEliminarArchivoPdf Vista
        {
            get { return _vista; }
            set { _vista = value; }
        }
        public EnlaceLogico Fachada
        {
            get { return _fachada; }
            set { _fachada = value; }
        }
        public List<OperacionesPdf> MisArchivos
        {
            get { return _misArchivos; }
            set { _misArchivos = value; }
        }
        public Profesor MiProfesor
        {
            get { return _miProfesor; }
            set { _miProfesor = value; }
        }
        public List<Categoria> MisCategorias
        {
            get { return _misCategorias; }
            set { _misCategorias = value; }
        }
        public SeccionMateria MiSeccion
        {
            get { return _miSeccion; }
            set { _miSeccion = value; }
        }
        public Materia MiMateria
        {
            get { return _miMateria; }
            set { _miMateria = value; }
        }
        #endregion


       #region Constructores

       public PresentadorEliminarArchivoPdf (IContratoEliminarArchivoPdf vista)
        {

           _vista = vista;
           _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
           _miSeccion = (SeccionMateria)_vista.Sesion["SeccionMateriaPdf"];
           _miMateria = (Materia)_vista.Sesion["MateriaPdf"];
           _vista.ListaArchivosPdf.Visible = true;
           _miProfesor = (Profesor)_fachada.RolActual;
        }
       #endregion

       #region METODOS

       /// <summary>
       /// Metodo que sirve para realizar el page load en la pagina
       /// </summary>
       /// <param name="Profesor"></param>  
       public void CargarInformacionPagina()
       {
          
           _vista.TraerNombreUsuarioPdf.Text = "Profesor(a): " + _miProfesor.Nombre + " " + _miProfesor.Apellido;
           _vista.TraerNombreMateria.Text = _miMateria.Nombre + " - Secci&oacute;n " + " 0" + _miSeccion.Codigo;

           if ((_misCategorias = _fachada.ConsultarCategorias(_miProfesor.Crn, _miSeccion.IdSeccionMateria)) != null)
               this.CargarComboCategorias();
           else
               _vista.MensajeDeTransaccion.Text = "No Existen Archivos en esta sección.";
       }

       public void CargarComboCategorias()
       {
            
            _vista.ComboBoxCategoriaPdf.Items.Clear();
            ListItem registroLista = new ListItem("- Selecciona -", "0");
            _vista.ComboBoxCategoriaPdf.Items.Add(registroLista);

            if (_misCategorias != null)
            {
                foreach (Categoria categoria in _misCategorias)
                {
                    // Creamos un nuevo registro para DropDownList1
                    ListItem registroLista2 = new ListItem();
                    registroLista2.Text = categoria.Nombre;
                    registroLista2.Value = categoria.Nombre;
                    _vista.ComboBoxCategoriaPdf.Items.Add(registroLista2);
                }
            }
       }



       public void CargarTablaArchivos()
        {
            DataTable miTabla = new DataTable();
            miTabla.Columns.Add("Categoría", typeof(string));
            miTabla.Columns.Add("Nombre del Archivo", typeof(string));
            miTabla.Columns.Add("Peso (Kb)", typeof(int));

            if (_misArchivos != null)
            {
                foreach (OperacionesPdf archivo in _misArchivos)
                {
                    if (archivo != null)
                    {
                        miTabla.Rows.Add(archivo.categoria.Nombre, archivo.nombreArchivo, archivo.Peso);
                    }
                }
                _vista.ListaArchivosPdf.DataSource = miTabla;
                _vista.ListaArchivosPdf.DataBind();
            }               
            
        }


       public void mensajesDeEstado()
       {
               _vista.MensajeDeTransaccion.CssClass = "transaccionFallida";
               _vista.MensajeDeTransaccion.Text = "Operación Fallida: Debe seleccionar una Categoría";
               _vista.MensajeDeTransaccion.Visible = true;
               _vista.LabelCategoria.ForeColor = System.Drawing.Color.Red;         
       }


       public void Button1_Click()
       {
           if (_vista.ComboBoxCategoriaPdf.SelectedValue != "0")
           {
               string categoria = _vista.ComboBoxCategoriaPdf.SelectedItem.Text.Trim();
               _misArchivos = _fachada.ConsultarArchivos(_miProfesor.Crn, _miSeccion.IdSeccionMateria, categoria);
               _vista.Sesion["Archivos"] = _misArchivos;
               _vista.MensajeDeTransaccion.Visible = false;
               _vista.LabelCategoria.ForeColor = System.Drawing.Color.Black;
               CargarTablaArchivos();

           }
           else
           {
               if ((_misCategorias = _fachada.ConsultarCategorias(_miProfesor.Crn, _miSeccion.IdSeccionMateria)) != null)
               {
                   if (_vista.ComboBoxCategoriaPdf.Items.Count == 1)
                   {
                       _vista.MensajeDeTransaccion.CssClass = "transaccionFallida";
                       _vista.MensajeDeTransaccion.Text = "No existen más archivos para la categoría.";
                       _vista.MensajeDeTransaccion.Visible = true;
                   }
                   else
                       mensajesDeEstado();
               }
               else 
                   mensajesDeEstado();
           }
               
       }
      
       public void Eliminar()
       {
           _misArchivos=(List<OperacionesPdf>)_vista.Sesion["Archivos"];
           _miSeccion = (SeccionMateria)_vista.Sesion["SeccionMateriaPdf"];
      
           int posicion = 0;
           posicion = (_vista.ListaArchivosPdf.PageIndex * 8) + _vista.ListaArchivosPdf.SelectedIndex;
           OperacionesPdf miArchivo = _misArchivos.ElementAt(posicion);
           FileInfo ruta = buscarRuta (_misArchivos, miArchivo.idArchivo);
           buscarRutaFinal(ruta, miArchivo);

           if (_fachada.EliminarArchivo(miArchivo, _miSeccion.IdSeccionMateria))
           {
               _vista.MensajeDeTransaccion.CssClass = "transaccionExitosa";
               _vista.MensajeDeTransaccion.Text = "El archivo se eliminó exitosamente.";
               _vista.MensajeDeTransaccion.Visible = true;
               _misArchivos.RemoveAt(posicion);
           }
           _vista.Sesion["Archivos"] = _misArchivos;

           if ((_misCategorias = _fachada.ConsultarCategorias(_miProfesor.Crn, _miSeccion.IdSeccionMateria)) != null)
           {
               this.CargarComboCategorias();
               CargarTablaArchivos();
           }
      
        }

       public void ComboBoxCategoria_SelectedIndexChanged()
       {
           _vista.MensajeDeTransaccion.Visible = false;
           _vista.LabelCategoria.ForeColor = System.Drawing.Color.Black;
       }

        public FileInfo buscarRuta (List <OperacionesPdf> misArchivos, int idArchivo)
        {
     
            foreach (OperacionesPdf archivo in misArchivos)
            {
                if (archivo.idArchivo == idArchivo)
                {
                    return archivo.rutaArchivoPdf;
                }
            }
            return null;
        }

              public bool buscarRutaFinal (FileInfo ruta, OperacionesPdf miArchivo)
        {
                  FileInfo rutaFinal = new FileInfo(HttpContext.Current.Server.MapPath(ruta.ToString() + miArchivo.nombreArchivo));
                  rutaFinal.Delete();
                  return true;
        }

            
        
   


       #endregion

    }
}